#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <cstdio>
//using namespace std;
//
//const int N = 1e5 + 10;
//int n, m;
//int q[N], cnt[N];
//int find(int a)
//{
//    if (q[a] != a)
//        q[a] = find(q[a]);
//    return q[a];
//}
//int main()
//{
//    scanf("%d%d", &n, &m);
//    for (int i = 1; i <= n; i++)
//    {
//        q[i] = i;
//        cnt[i] = 1;
//    }
//    while (m--)
//    {
//        char op[5];
//        int a, b;
//        scanf("%s", op);
//        if (op[0] == 'C')
//        {
//            scanf("%d%d", &a, &b);
//            if (find(a) == find(b))
//                continue;
//            else
//            {
//                q[find(a)] = find(b);
//                cnt[find(b)] += cnt[find(a)];
//            }
//        }
//        else if (op[1] == '1')
//        {
//            scanf("%d%d", &a, &b);
//            if (find(a) == find(b))
//                puts("Yes");
//            else
//                puts("No");
//        }
//        else if (op[1] == '2')
//        {
//            scanf("%d", &a);
//            printf("%d\n", cnt[find(a)]);
//        }
//    }
//    return 0;
//}
//#include <iostream>
//#include <cstdio>
//using namespace std;
//
//const int N = 1e5 + 10;
//int e[N], r[N], l[N], idx;
//void ini()
//{
//    r[0] = 1;
//    l[1] = 0;
//    idx = 2;
//}
//void insert(int k, int x)
//{
//    e[idx] = x;
//    l[idx] = k, r[idx] = r[k];
//    l[r[k]] = idx, r[k] = idx++;
//}
//void pop(int k)
//{
//    r[l[k]] = r[k];
//    l[r[k]] = l[k];
//}
//int main()
//{
//    ini();
//    int m;
//    scanf("%d", &m);
//    while (m--)
//    {
//        char op[5];
//        scanf("%s", op);
//        int k, x;
//        if (*op == 'L')
//        {
//            scanf("%d", &x);
//            insert(0, x);
//        }
//        else if (*op == 'R')
//        {
//            scanf("%d", &x);
//            insert(l[1], x);
//        }
//        else if (op[1] == 'L')
//        {
//            scanf("%d%d", &k, &x);
//            insert(l[k + 1], x);
//        }
//        else if (op[1] == 'R')
//        {
//            scanf("%d%d", &k, &x);
//            insert(k + 1, x);
//        }
//        else
//        {
//            scanf("%d", &k);
//            pop(k + 1);
//        }
//    }
//    for (int i = r[0]; i != 1; i = r[i])
//        printf("%d ", e[i]);
//    return 0;
//}
#include <iostream>
#include <cstdio>

using namespace std;
const int N = 1e6 + 10;
int w[N], q[N], tt = 0, hh = -1;
int main()
{
    int n, k;
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++)
        scanf("%d", &w[i]);
    for (int i = 1; i <= n; i++)
    {
        if (tt <= hh && w[q[tt]] < i - k + 1) tt++;
        while (tt <= hh && w[i] < w[q[hh]]) hh--;
        q[++hh] = i;
        if (i >= k)
            printf("%d ", w[q[tt]]);
    }

    return 0;
}